﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Entities;
using Microsoft.ApplicationBlocks.Data;
using System.Data;


namespace DAL
{
    public class DireccionDAL
    {
        public static string strConexion = System.Configuration.ConfigurationManager.ConnectionStrings["ConexionBaseDesarrollo"].ConnectionString;

        public static long Nuevo(Direccion parDireccion)
        {
            long longRetorno = long.Parse(SqlHelper.ExecuteScalar(strConexion, "spDireccionNuevo",
            parDireccion.Calle.IDCalle,
            parDireccion.Localidad.IDLocalidad,
            parDireccion.Barrio.IDBarrio,
            parDireccion.Numero,
            parDireccion.CodigoPostal,
            parDireccion.Piso,
            parDireccion.Departamento).ToString());
            return longRetorno;
        }

        public static void Modificar(Direccion parDireccion)
        {
            SqlHelper.ExecuteNonQuery(strConexion, "spDireccionModificar",
            parDireccion.IDDireccion,
            parDireccion.Calle.IDCalle,
            parDireccion.Localidad.IDLocalidad,
            parDireccion.Barrio.IDBarrio,
            parDireccion.Numero,
            parDireccion.CodigoPostal,
            parDireccion.Piso,
            parDireccion.Departamento);
        }

        public static void Eliminar(long parIDDireccion)
        {
            SqlHelper.ExecuteNonQuery(strConexion, "spDireccionEliminar", parIDDireccion);
        }

        public static Direccion BuscarUno(long parIDDireccion)
        {
            try
            {
                DataTable dt = new DataTable();
                //Busca el objeto por el ID, si lo encuentra lo devuelve
                dt = SqlHelper.ExecuteDataset(strConexion, "spDireccionObtenerUno", parIDDireccion).Tables[0];
                if (dt.Rows.Count > 0)
                {
                    Direccion oDireccion = new Direccion();
                    DataRow dr = dt.Rows[0];
                    oDireccion.IDDireccion = long.Parse(dr["IDDireccion"].ToString());
                    oDireccion.Calle = Calle.BuscarUno(long.Parse(dr["IDCalle"].ToString()));
                    oDireccion.Localidad = Localidad.BuscarUno(long.Parse(dr["IDLocalidad"].ToString()));
                    oDireccion.Barrio = Barrio.BuscarUno(long.Parse(dr["IDBarrio"].ToString()));
                    oDireccion.Numero = int.Parse(dr["Numero"].ToString());
                    oDireccion.CodigoPostal = int.Parse(dr["CodigoPostal"].ToString());
                    oDireccion.Piso = dr["Piso"].ToString();
                    oDireccion.Departamento = dr["Departamento"].ToString();
                    return oDireccion;
                }
                //sino retorna Null
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static List<Direccion> BuscarVarios(string parNombrePais)
        {
            try
            {
                List<Direccion> ListaDireccion = new List<Direccion>();
                DataTable dt = new DataTable();
                //Busco el objeto por sus propiedades, si encontro, retorna el objeto Negocio
                dt = SqlHelper.ExecuteDataset(strConexion, "spPaisBuscarVarios", parNombrePais).Tables[0];
                if (dt.Rows.Count > 0)
                {
                    //Va cargando los cargos uno a uno.
                    foreach (DataRow dr in dt.Rows)
                    {
                        Direccion oDireccion = new Direccion();
                        //oPais.IDPais = long.Parse(dr["IDPais"].ToString());
                        //oPais.NombrePais = dr["NombrePais"].ToString();
                        ListaDireccion.Add(oDireccion);
                    }
                    return ListaDireccion;
                }
                //sino retorna Null
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
